Use chain_error in TomlManifest.replace when checking valid semver.
authorJuan Hernández <juan.hernandez.babon@gmail.com>
Mon, 3 Oct 2016 08:55:05 +0000 (10:55 +0200)
committerJuan Hernández <juan.hernandez.babon@gmail.com>
Mon, 3 Oct 2016 08:55:05 +0000 (10:55 +0200)
Don't throw away previous error messages, they might be useful
for the user.

src/cargo/util/toml.rs
tests/overrides.rs

index 578d447432730f2f65eb68f0823a892676349564..a051a2836b3beae49e0e13d9e3859e1371009aa8 100644 (file)
@@ -737,12 +737,11 @@ impl TomlManifest {
                -> CargoResult<Vec<(PackageIdSpec, Dependency)>> {
         let mut replace = Vec::new();
         for (spec, replacement) in self.replace.iter().flat_map(|x| x) {
-            let spec = match PackageIdSpec::parse(spec) {
-                Ok(spec) => spec,
-                Err(_)   => bail!("replacements must specify a \
-                                   valid semver version \
-                                   to replace, but `{}` does not", spec),
-            };
+            let spec = try!(PackageIdSpec::parse(spec).chain_error(|| {
+                human(format!("replacements must specify a valid semver \
+                               version to replace, but `{}` does not",
+                              spec))
+            }));
 
             let version_specified = match *replacement {
                 TomlDependency::Detailed(ref d) => d.version.is_some(),
index eff9bbf9d85566fb598a2e014a8d05dcee3dd498..816efd53c1d8be426421decdef1bb43020de03b7 100644 (file)
@@ -95,7 +95,7 @@ fn invalid_semver_version() {
         .file("src/lib.rs", "");
 
     assert_that(p.cargo_process("build"),
-                execs().with_status(101).with_stderr("\
+                execs().with_status(101).with_stderr_contains("\
 error: failed to parse manifest at `[..]`
 
 Caused by: